Disable watch callbacks only during driver registration instead of all probes.
authorcl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Wed, 12 Oct 2005 19:58:51 +0000 (20:58 +0100)
committercl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Wed, 12 Oct 2005 19:58:51 +0000 (20:58 +0100)
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c

index 4471f10d3284ebb957bec0043e7eeb66bf16aab6..e04798a5623ce61e081d5e20bfd5ed543e8f92fc 100644 (file)
@@ -207,7 +207,6 @@ static int xenbus_dev_probe(struct device *_dev)
        struct xenbus_device *dev = to_xenbus_device(_dev);
        struct xenbus_driver *drv = to_xenbus_driver(_dev->driver);
        const struct xenbus_device_id *id;
-       int ret;
 
        if (!drv->probe)
                return -ENODEV;
@@ -216,10 +215,7 @@ static int xenbus_dev_probe(struct device *_dev)
        if (!id)
                return -ENODEV;
 
-       down(&xenwatch_mutex);
-       ret = drv->probe(dev, id);
-       up(&xenwatch_mutex);
-       return ret;
+       return drv->probe(dev, id);
 }
 
 static int xenbus_dev_remove(struct device *_dev)
@@ -235,13 +231,18 @@ static int xenbus_dev_remove(struct device *_dev)
 static int xenbus_register_driver_common(struct xenbus_driver *drv,
                                         struct xen_bus_type *bus)
 {
+       int ret;
+
        drv->driver.name = drv->name;
        drv->driver.bus = &bus->bus;
        drv->driver.owner = drv->owner;
        drv->driver.probe = xenbus_dev_probe;
        drv->driver.remove = xenbus_dev_remove;
 
-       return driver_register(&drv->driver);
+       down(&xenwatch_mutex);
+       ret = driver_register(&drv->driver);
+       up(&xenwatch_mutex);
+       return ret;
 }
 
 int xenbus_register_driver(struct xenbus_driver *drv)